
package com.thinkgem.jeesite.common.component.redis.element;

import java.util.List;

import redis.clients.jedis.Jedis;

/** 
 * 放置rds的容器类(list)元素操作
 * (栈结构:使用lpush-lpop,或者rpush-rpop)
 * (队列结构:使用lpush-rpop,或者rpush-lpop)
 */
public class RdsLists{

	public RdsLists(Jedis jedis) {
	    super();
	    this.jedis = jedis;
    }

	public Jedis getJedis() {
    	return jedis;
    }

	public void setJedis(Jedis jedis) {
    	this.jedis = jedis;
    }

	/*****************L方向操作列表部分*******************/

	/**
	 * list结构从头部添加values..到key
	 * @param key
	 * @param values
	 * @return
	 * 2014-10-27
	 */
	public long lpush(String key, String... values) {
		return getJedis().lpush(key, values);
	}

	/**
	 * 同上,增加存活时间设置
	 * @param key
	 * @param values
	 * @param seconds (单位:s)
	 * @return
	 * 2014-10-27
	 */
	public long lpush(String key, String[] values, int seconds) {
		long result = lpush(key, values);
		getJedis().expire(key, seconds);
		return result;
	}

	/**
	 * list结构从头部添加values..到key,区别是当key不存在时,什么都不做
	 * @param key
	 * @param values
	 * @return
	 * 2014-10-27
	 */
	public long lpushx(String key, String... values) {
		return getJedis().lpushx(key, values);
	}

	/**
	 * list结构返回key从序列start到end的数据
	 * @param key
	 * @param start
	 * @param end
	 * @return
	 * 2014-10-27
	 */
	public List<String> lrange(String key, long start, long end) {
		return getJedis().lrange(key, start, end);
	}

	/**
	 * list结构中保留key从start到end之间的数据,将范围外的数据删除
	 * @param key
	 * @param start
	 * @param end
	 * @return
	 * 2014-10-27
	 */
	public String ltrim(String key, long start, long end) {
		return getJedis().ltrim(key, start, end);
	}

	/**
	 * list结构中返回key在index序列对应的数据
	 * @param key
	 * @param index
	 * @return
	 * 2014-10-27
	 */
	public String lindex(String key, long index) {
		return getJedis().lindex(key, index);
	}

	/**
	 * list结构中更新key在index序列对应的数据为value
	 * @param key
	 * @param index
	 * @param value
	 * @return
	 * 2014-10-27
	 */
	public String lset(String key, long index, String value) {
		return getJedis().lset(key, index, value);
	}

	/**
	 * list结构中从key的头部或尾部删除数量为count的,取值为value的kv数据集,并返回删除掉的数据个数.
	 * (conut为正数时,表示从头部删除;为负数时,表示从尾部删除.)
	 * (注意:进行删除匹配的不是key,而是key对应的取值value)
	 * @param key
	 * @param count
	 * @param value
	 * @return
	 * 2014-10-27
	 */
	public long lrem(String key, long count, String value) {
		return getJedis().lrem(key, count, value);
	}

	/**
	 * list结构从key的头部取出一个数据返回
	 * @param key
	 * @return
	 * 2014-10-27
	 */
	public String lpop(String key) {
		return getJedis().lpop(key);
	}

	/*****************R方向操作列表部分*******************/

	/**
	 * list结构中将源key尾部的数据取出放到目标key的头部,并返回弹出的元素
	 * (当源key中的数据弹出完后,该key自动销毁)
	 * @param srckey
	 * @param dstkey
	 * @return
	 * 2014-10-27
	 */
	public String rpoplpush(String srckey, String dstkey) {
		return getJedis().rpoplpush(srckey, dstkey);
	}

	/**
	 * list结构从尾部添加values..到key
	 * @param key
	 * @param values
	 * @return
	 * 2014-10-27
	 */
	public long rpush(String key, String... values) {
		return getJedis().rpush(key, values);
	}

	/**
	 * 同上,增加存活时间设置
	 * @param key
	 * @param values
	 * @param seconds (单位:s)
	 * @return
	 * 2014-10-27
	 */
	public long rpush(String key, String[] values, int seconds) {
		long result = rpush(key, values);
		getJedis().expire(key, seconds);
		return result;
	}

	/**
	 * list结构从尾部添加values..到key,区别是当key不存在时,什么都不做
	 * @param key
	 * @param values
	 * @return
	 * 2014-10-27
	 */
	public long rpushx(String key, String... values) {
		return getJedis().rpushx(key, values);
	}

	/**
	 * list结构从key的尾部取出一个数据返回
	 * @param key
	 * @return
	 * 2014-10-27
	 */
	public String rpop(String key) {
		return getJedis().rpop(key);
	}

	private Jedis jedis;//当前客户端
}
